Дата последнего изменения: 13.11.2023
С переходом магазина на новую схему работы было введено понятие ограничений. Ограничения можно добавлять для служб доставок, платежных систем, касс и компаний (для компаний ограничения являются правилами).
Таким образом, например, службу доставки можно настроить так, что она будет работать только для некоторого местоположения, только для заказов такой-то стоимости,веса или выбрать другие ограничения из стандартных ограничений.
Вы можете дополнить стандартный набор ограничений своими собственными ограничениями. Для этого следует в зависимости от ваших нужд использовать события инициализации ограничений:
Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'onSaleDeliveryRestrictionsClassNamesBuildList', 'myDeliveryFunction' );
Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'onSalePaySystemRestrictionsClassNamesBuildList', 'myPayFunction' );
Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'onSaleCashboxRestrictionsClassNamesBuildList', 'myCashboxFunction' );
Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'onSaleCompanyRulesClassNamesBuildList', 'myCompanyFunction' );
В обработчиках событий соответственно следует возвращать ваш класс ограничений:
function myDeliveryFunction() { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( '\MyDeliveryRestriction' => '/bitrix/php_interface/include/mydelrestriction.php', ) ); }
function myPayFunction() { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( '\MyPayRestriction' => '/bitrix/php_interface/include/mypayrestriction.php', ) ); }
function myCashboxFunction() { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( '\MyCashboxRestriction' => '/bitrix/php_interface/include/mycashboxrestriction.php', ) ); }
function myCompanyFunction() { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( '\MyCompanyRestriction' => '/bitrix/php_interface/include/mycompanyrestriction.php', ) ); }
Далее, описывая ограничение, вы можете вводить какие-то собственные правила. Например, в примере ниже приведено ограничение доступности службы доставки по лунным суткам:
use Bitrix\Sale\Delivery\Restrictions; use Bitrix\Sale\Internals\Entity; class MyDeliveryRestriction extends Restrictions\Base { public static function getClassTitle() { return 'по лунным суткам'; } public static function getClassDescription() { return 'доставка будет выводится только в указанном диапазоне лунных суток'; } public static function check($moonday, array $restrictionParams, $deliveryId = 0) { if ($moonday < $restrictionParams['MIN_MOONDAY'] || $moonday > $restrictionParams['MAX_MOONDAY']) return false; return true; } protected static function extractParams(Entity $shipment) { $json = file_get_contents('http://moon-today.com/api/index.php?get=moonday'); $res = json_decode($json, true); return !empty($res['moonday']) ? intval($res['moonday']) : 0; } public static function getParamsStructure($entityId = 0) { return array( "MIN_MOONDAY" => array( 'TYPE' => 'NUMBER', 'DEFAULT' => "1", 'LABEL' => 'Минимальные сутки' ), "MAX_MOONDAY" => array( 'TYPE' => 'NUMBER', 'DEFAULT' => "30", 'LABEL' => 'Максимальные сутки' ) ); } }